#ifndef __NRF24L01SPI_H__
#define __NRF24L01SPI_H__

#include <rtthread.h>
#include <rtdevice.h>
#include <drv_common.h>

// 保留原有引脚，新增软件SPI引脚（根据实际硬件修改）
#define NRF24L01_SPI_BUS_NAME       "spi0"      // 可忽略，软件SPI不再使用
#define NRF24L01_SPI_DEVICE_NAME    "spi02"     // 可忽略
#define NRF24L01_CS_PIN             GET_PIN(B, 0)
#define NRF24L01_CE_PIN             GET_PIN(B, 10)
// 新增软件SPI引脚（用户需根据实际硬件修改）PB10
#define NRF24L01_SCK_PIN            GET_PIN(A, 5)  // 软件SPI时钟引脚
#define NRF24L01_MOSI_PIN           GET_PIN(A, 7)  // 软件SPI发送引脚
#define NRF24L01_MISO_PIN           GET_PIN(A, 6)  // 软件SPI接收引脚
#define NRF24L01_REG_FEATURE    0x1D
#define NRF24L01_REG_DYNPD    0x1C
#define ack_PAYLOAD_WIDTH    4

// 寄存器地址
#define NRF24L01_REG_CONFIG         0x00
#define NRF24L01_REG_EN_AA          0x01
#define NRF24L01_REG_EN_RXADDR      0x02
#define NRF24L01_REG_SETUP_AW       0x03
#define NRF24L01_REG_SETUP_RETR     0x04
#define NRF24L01_REG_RF_CH          0x05
#define NRF24L01_REG_RF_SETUP       0x06
#define NRF24L01_REG_STATUS         0x07
#define NRF24L01_REG_RX_ADDR_P0     0x0A
#define NRF24L01_REG_TX_ADDR        0x10
#define NRF24L01_REG_RX_PW_P0       0x11

// 命令
#define NRF24L01_CMD_R_REGISTER     0x00
#define NRF24L01_CMD_W_REGISTER     0x20
#define NRF24L01_CMD_R_RX_PAYLOAD   0x61
#define NRF24L01_CMD_W_TX_PAYLOAD   0xA0
#define NRF24L01_CMD_FLUSH_TX       0xE1
#define NRF24L01_CMD_FLUSH_RX       0xE2
#define NRF24L01_CMD_NOP            0xFF
// 添加到 nrf24l01spi.h 中
#define NRF24L01_CMD_W_ACK_PAYLOAD 0xA8  // 写 ACK 数据专用命令（管道0）
// 共享配置参数（收发必须一致）
#define RF_CHANNEL                  0x0A        // 射频通道10
#define PAYLOAD_WIDTH               3        // 数据宽度2字节
const uint8_t DEVICE_ADDR[5] = {0x11, 0x22, 0x33, 0x44, 0x55}; // 设备地址

// 函数声明
rt_err_t nrf24l01_init(void);
void nrf24l01_set_tx_mode(void);
void nrf24l01_set_rx_mode(void);
rt_err_t nrf24l01_send_data(uint8_t *payload, uint8_t len);
rt_err_t nrf24l01_receive_data(uint8_t *buffer, uint8_t len);
rt_bool_t nrf24l01_data_available(void);

#endif /* __NRF24L01SPI_H__ */
